<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //对象的新增方法
      //1.Object.keys(): 获取对象的所有键名
      //   var obj = {
      //     name: "张三",
      //     age: 20,
      //   };
      //   console.log(Object.keys(obj));

      //2.Object.values():获取对象的所有键值
      //   var obj = {
      //     name: "张三",
      //     age: 20,
      //   };
      //   console.log(Object.values(obj));

      //3.Object.freeze():把对象冻结起来
      //   var obj = {
      //     name: "张三",
      //     age: 20,
      //   };
      //   Object.freeze(obj);
      //   //修改
      //   obj.name = "123"; //修改失败
      //   delete obj.age; //删除失败
      //   console.log(obj);

      //4.Object.seal(): 把对象变成不可配置对象
      //把对象变成不可配置对象,对象内容可以修改,但是不能被删除
      //   var obj = {
      //     name: "张三",
      //     age: 20,
      //   };
      //   Object.seal(obj);
      //   obj.name = "李四"; //修改成功
      //   delete obj.age; //删除失败
      //   console.log(obj);

      //5.Object.is(): 判断两个数据是否相同
      //解决了NaN不等于NaN的bug
      //   var a = 10;
      //   var b = 10;
      //   console.log(a === b); //true
      //   console.log(NaN === NaN); //false
      //   console.log(Object.is(NaN, NaN)); //true

      //6.合并两个或者多个对象
      //   var obj1 = {
      //     name: "张三",
      //     score: 60,
      //   };
      //   var obj2 = {
      //     age: 20,
      //     score: 70,
      //   };
      //   var obj3 = {
      //     height: "178cm",
      //     score: 80,
      //   };
      //   var obj = { ...obj1, ...obj2, ...obj3 };
      //   console.log(obj); //重复的键名直接覆盖了
      //   var objj = Object.assign(obj1, obj2, obj3);
      //   console.log(objj);

      //7.Object.hasOwn :判断一个属性是否是对象的自身属性
      //   ES5:判断某个属性是否是自身属性
      Object.prototype.height = "178cm";
      var obj = {
        name: "张三",
        age: 20,
      };
      for (let key in obj) {
        // console.log(key);
        console.log(key, obj.hasOwnProperty(key));
        /* 
        name true
        age true
        height false   height 是原型里面的属性 所以false*/
      }

      // ES6 : 判断某个属性是否是自身属性
      Object.prototype.height = "178cm";
      var obj = {
        name: "123",
        age: 20,
      };
      for (let key in obj) {
        console.log(key, Object.hasOwn(obj, key)); //两个参数 一个是自身对象  另外一个是要查询的参数
      }
    </script>
  </body>
</html>
